package com.javasm.mingming.task.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.javasm.mingming.task.dao.SysTaskDao;
import com.javasm.mingming.task.entity.SysTask;
import com.javasm.mingming.task.schedule.JavasmSchedulerConfigurer;
import com.javasm.mingming.task.service.SysTaskService;

import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * (SysTask)表服务实现类
 *
 * @author makejava
 * @since 2025-01-17 10:11:28
 */
@Service("sysTaskService")
public class SysTaskServiceImpl extends ServiceImpl<SysTaskDao, SysTask> implements SysTaskService {

    @Resource
    JavasmSchedulerConfigurer javasmSchedulerConfigurer;
    @Resource
    ThreadPoolTaskExecutor taskExecutor;

    @Override
    public void startTask(Integer id) {
        //查询 任务信息
        SysTask sysTask = getById(id);
        if (javasmSchedulerConfigurer.regTask(sysTask)){
            taskExecutor.execute(()->{
                //成功
                //修改任务状态
                sysTask.setStatus(1);
                updateById(sysTask);
            });

        }
    }

    @Override
    public void stopTask(Integer id) {
        javasmSchedulerConfigurer.stop(id);
        //主要业务的代码,不能放到多线程中
        //主要业务执行之后的次要业务,比如说修改状态,添加一些附表的值/修改缓存等,可以放入子线程,用来提高效率
        //线程池
        taskExecutor.execute(()->{
            SysTask sysTask = new SysTask();
            sysTask.setId(id);
            sysTask.setStatus(0);
            updateById(sysTask);
        });

    }
}

